package com.ruoyi.graduate.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 约拍订单号生成工具类
 * 格式：YP + 年月日（8位） + 三位递增序号（001-999）
 */
public class OrderNoGenerator {
    // 订单号前缀（固定为YP，可根据需求修改）
    private static final String PREFIX = "YP";
    // 日期格式化器（yyyyMMdd）
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    // 原子计数器（保证多线程环境下序号唯一）
    private static final AtomicInteger COUNTER = new AtomicInteger(1);
    // 上一次生成订单号的日期（用于每日重置序号）
    private static LocalDate lastGenerateDate;

    /**
     * 生成唯一订单号
     * @return 格式如YP20251109001的订单号
     */
    public static String generateOrderNo() {
        LocalDate currentDate = LocalDate.now();
        // 每日重置计数器（如果当前日期与上一次不同，重置为1）
        if (lastGenerateDate == null || !lastGenerateDate.equals(currentDate)) {
            COUNTER.set(1);
            lastGenerateDate = currentDate;
        }

        // 生成日期字符串（如20251109）
        String dateStr = currentDate.format(DATE_FORMATTER);
        // 生成三位递增序号（不足三位补0，如1→001，10→010）
        String sequence = String.format("%03d", COUNTER.getAndIncrement());

        // 拼接订单号（前缀+日期+序号）
        return PREFIX + dateStr + sequence;
    }

}